<?php
/**
 +------------------------------------------------------------------------------
 * 基于模块的缓存文件验证类
 +------------------------------------------------------------------------------
 */
/* 
'USER_AUTH_ON'              =>  true,				// 是否开启网站会员
'WECHAT_AUTH_ON'            =>  true,			    // 是否开启微信会员
'USER_AUTH_IDEN'			=>  'memberIden',		// 网站会员session标识
'USER_AUTH_KEY'			    =>  'memberId',			// 公共session标识
'USER_AUTH_NAME'			=>  'memberName',		// 公共session昵称标识
'USER_AUTH_TYPE'			=>  'memberType',		// 公共session会员类型标识
'WECHAT_AUTH_IDEN'			=>  'wechatIden',		// 微信会员session标识
'USER_AUTH_MODEL'           =>  'Member',	        // 网站会员数据表模型
'WECHAT_AUTH_MODEL'         =>  'Memberwx',	        // 微信会员数据表模型

'AUTH_PWD_ENCODER'          =>  'myencrypt',       // 用户认证密码加密方式
'USER_AUTH_GATEWAY'         =>  '/Public/login',   // 网站会员默认认证网关
'WECHAT_AUTH_GATEWAY'       =>  '/Public/wxlog',   // 微信会员默认认证网关

'USER_REQUIRE_AUTH_MODULE'  =>  'Member,Order',	   // 网站会员需要认证模块
'USER_REQUIRE_AUTH_ACTION'  =>  '',		           // 网站会员需要认证操作
'WECHAT_REQUIRE_AUTH_MODULE'=>  'Memberwx',		   // 微信会员需要认证模块
'WECHAT_REQUIRE_AUTH_ACTION'=>  '',		           // 微信会员需要认证操作
'NOT_AUTH_MODULE'           =>  'Public,Article,Artonce,Atlas,Index,Product',
												   // 公共默认无需认证模块
'NOT_AUTH_ACTION'           =>  'ajax',		       // 公共默认无需认证操作
 */

class MBAC {
	
	// 用户登录检查
	static public function checkLoginUser() {
		if(!cookie(C('USER_AUTH_KEY'))) {
			if($_SESSION[C('WECHAT_AUTH_IDEN')]){
				//$url = 	PHP_FILE.C('WECHAT_AUTH_GATEWAY');
				$url = 	U(C('WECHAT_AUTH_GATEWAY'));
			}else{
				$url = 	U(C('USER_AUTH_GATEWAY'));
			}
			$_SESSION[C('REFER_URL')] = I("server.REQUEST_URI");
			redirect($url);
		}      
        return true;
	}
	
	// 微信登录检查
	static public function checkLoginWechat() {
		if(!$_SESSION[C('WECHAT_AUTH_IDEN')]) {
			$_SESSION[C('REFER_URL')] = I("server.REQUEST_URI");
			
			redirect(U(C('USER_AUTH_GATEWAY')));
		}else{
			if($_SESSION[C('USER_AUTH_IDEN')]){
				
				redirect(U(C('USER_AUTH_GATEWAY')));
			}
		}
		return true;
	}
	
	//权限认证的过滤器方法
	static public function AccessDecision($appName=APP_NAME) {
		//检查是否需要认证
		$user = MBAC::checkAccessUser();
		
		if($user){
			MBAC::checkLoginUser();
		}else{
			$chat = MBAC::checkAccessWechat();
			if($chat){
				MBAC::checkLoginWechat();
			}
		}
		return true;
	}


    //检查当前操作是否需要认证
    static function checkAccessUser() {
		$_flag      =   false;
		$_module	=	array();
		$_action	=	array();
		
		$AUTH_MODULE = C('USER_REQUIRE_AUTH_MODULE');
		
		if(!empty($AUTH_MODULE)) {
			//需要认证的模块
			$_module['yes'] = explode(',',strtoupper($AUTH_MODULE));
		}
		
		//检查当前模块是否需要认证
		if((!empty($_module['yes']) && in_array(strtoupper(MODULE_NAME),$_module['yes']))) {
			$NO_ACTION  = C('NOT_AUTH_ACTION');
			$_flag      =   true ;
			if(!empty($NO_ACTION)) {
				//需要认证的操作
				$_action['yes'] = explode(',',strtoupper($NO_ACTION));
				if((!empty($_action['yes']) && in_array(strtoupper(ACTION_NAME),$_action['yes']))) {
					$_flag = false;
				}
			}
		}else {
			$_flag  =  false;
		}
        return $_flag;
    }
    
    //检查当前操作是否需要认证
    static function checkAccessWechat() {
    	$_flag      =   false;
    	$_module	=	array();
    
    	$AUTH_MODULE = C('WECHAT_REQUIRE_AUTH_MODULE');
    
    	if(!empty($AUTH_MODULE)) {
    		$_module['yes'] = explode(',',strtoupper($AUTH_MODULE));
    		
    		if((!empty($_module['yes']) && in_array(strtoupper(MODULE_NAME),$_module['yes']))) {
    			$_flag      =   true ;
    		}
    	}
    	return $_flag;
    }
	
}